setTimeout(() => {
  console.log('setTimeout1');
  setTimeout(() => {
    console.log('setTimeout3');
  }, 0);
  setImmediate(() => { /** 这个一定比setTimeout3先执行,因为setTimeout3是放到下一轮了,而当前setTimout执行完后会检查截止到本轮的setTimout清空完没,然后清空本轮setTimout阶段产生的微任务,然后走下面的阶段,轮到setImmediate阶段时,正好遇到setTimeout1产生的setImmediate1,就会先执行*/
    console.log('setImmediate1');
  });
});


setTimeout(() => {
  console.log('setTimeout2');
});
